package com.unitd.filesystem.provider;

import com.unitd.filesystem.comm.FileType;

import java.io.Closeable;
import java.io.File;
import java.io.InputStream;

/**
 * @desc 文件系统上传、下载接口类
 * @filename IFsProvider.java
 * @copyright www.unitd.com
 * @author Hudan
 * @version 1.0
 * @date 2017/3/6
 */
public interface IFsProvider extends Closeable {

	/**
	 * @desc 文件方式上传
	 * @param catalog  图片分组
	 * @param fileName 文件名(需确保唯一性),为空系统自动生成
	 * @param file 需要上传的文件
	 * @return String
	 */
	String upload(String catalog, String fileName, File file);

	/**
	 * @desc 字节流方式上传
	 * @param catalog  图片分类
	 * @param fileName 文件名(需确保唯一性),为空系统自动生成
	 * @param in 文件输入流
	 * @param fileType 文件类型信息
	 * @return String
	 */
	String upload(String catalog, String fileName, InputStream in, FileType fileType);

	/**
	 * @desc 字节方式上传
	 * @param catalog  图片分组
	 * @param fileName 文件名(需确保唯一性),为空系统自动生成
	 * @param data 文件字节
	 * @param fileType 文件类型信息
	 * @return String
	 */
	String upload(String catalog, String fileName, byte[] data, FileType fileType);

	/**
	 * @desc 从网络地址下载图片并上传
	 * @param catalog  图片分类
	 * @param fileName fileName 文件名(需确保唯一性),为空则自动生成
	 * @param origUrl 原始网络地址
	 * @return String
	 */
	String upload(String catalog, String fileName, String origUrl);

	/**
	 * @desc 根据文件名, 删除文件系统中的文件
	 * @param fileName 指定的文件
	 * @return boolean
	 */
	boolean delete(String fileName);

	/**
	 * @desc 下载文件, 将分布式文件系统中的指定ID的文件下载到本地指定路径
	 * @param fileId 分布式文件系统中的文件全路径
	 * @param destFile 下载的文件存放在本地的路径
	 */
	void download(String fileId, File destFile);

	/**
	 * @desc 创建上传文件锁, 用于防止上传过程中文件发生改变
	 * @param fileNames 需要上传的文件
	 * @return String
	 */
	String createUploadToken(String... fileNames);

	/**
	 * @desc 根据文件名, 获取图片地址
	 * @param fileName 指定的文件
	 * @return String
	 */
	String getPath(String fileName);
}